#!/usr/bin/env python3
"""
数据加载器：用于从CSV文件中加载图数据
"""

from graph_classes import load_graph_from_csv, Graph, Node


def main():
    """
    主程序入口：加载计算图数据并进行验证
    """
    # 1. 定义任务名称
    task_name = 'Conv_Case0'
    
    print(f"正在加载任务数据: {task_name}")
    print("=" * 50)
    
    try:
        # 2. 调用load_graph_from_csv函数加载图数据
        graph = load_graph_from_csv(task_name)
        
        # 3. 打印验证信息
        node_count = len(graph.nodes)
        edge_count = sum(len(successors) for successors in graph.successors.values())
        
        print(f"✅ 数据加载成功！")
        print(f"📊 节点总数: {node_count}")
        print(f"🔗 依赖边总数: {edge_count}")
        print()
        print("💡 提示: 请将上述数字与Word文档中的表2进行核对以验证数据加载的正确性。")
        print()
        
        # 4. 随机选择一个节点进行详细验证
        test_node_id = 13
        print(f"🔍 验证节点 {test_node_id} 的详细信息:")
        print("-" * 40)
        
        test_node = graph.get_node(test_node_id)
        if test_node:
            print(f"节点ID: {test_node.id}")
            print(f"操作类型: {test_node.op}")
            print(f"缓冲区ID: {test_node.buf_id}")
            print(f"大小: {test_node.size}")
            print(f"类型: {test_node.type}")
            print(f"管道: {test_node.pipe}")
            print(f"周期数: {test_node.cycles}")
            print(f"缓冲区列表: {test_node.bufs}")
            
            # 打印该节点的连接关系
            predecessors = graph.get_predecessors(test_node_id)
            successors = graph.get_successors(test_node_id)
            print(f"前驱节点: {predecessors}")
            print(f"后继节点: {successors}")
            
            print()
            print("✅ 节点数据解析验证完成 - 所有字段正确加载！")
            
        else:
            print(f"❌ 警告: 找不到ID为 {test_node_id} 的节点")
        
        # 额外统计信息
        print()
        print("📈 附加统计信息:")
        print("-" * 40)
        
        # 统计不同操作类型的数量
        op_counts = {}
        for node in graph.nodes.values():
            op_counts[node.op] = op_counts.get(node.op, 0) + 1
        
        print("操作类型分布:")
        for op_type, count in sorted(op_counts.items()):
            print(f"  {op_type}: {count}")
        
        # 统计节点连接度
        in_degrees = [len(graph.get_predecessors(node_id)) for node_id in graph.nodes.keys()]
        out_degrees = [len(graph.get_successors(node_id)) for node_id in graph.nodes.keys()]
        
        print(f"\n连接度统计:")
        print(f"  平均入度: {sum(in_degrees) / len(in_degrees):.2f}")
        print(f"  平均出度: {sum(out_degrees) / len(out_degrees):.2f}")
        print(f"  最大入度: {max(in_degrees) if in_degrees else 0}")
        print(f"  最大出度: {max(out_degrees) if out_degrees else 0}")
        
    except FileNotFoundError as e:
        print(f"❌ 文件未找到错误: {e}")
    except Exception as e:
        print(f"❌ 数据加载失败: {e}")
        import traceback
        traceback.print_exc()


if __name__ == "__main__":
    main()
